
#include "Event.hpp"


#ifndef UTILS_WINDOWEVENT
#define UTILS_WINDOWEVENT

#include <memory>

class Window;
class WindowEvent : public Event {
public:
    WindowEvent() = default;
    virtual ~WindowEvent() = default;
};

class WindowResizeEvent : public WindowEvent {
public:
    const std::shared_ptr<Window> window;
    const int width, height;

    WindowResizeEvent(
        const std::shared_ptr<Window>& _window,
        const int _width,
        const int _height
    ) : window(_window), width(_width), height(_height) {}
    virtual ~WindowResizeEvent() = default;
};


class WindowMoveEvent : public WindowEvent {
public:
    const std::shared_ptr<Window> window;
    const int x, y;

    WindowMoveEvent(
        const std::shared_ptr<Window>& _window,
        const int _x,
        const int _y
    ) : window(_window), x(_x), y(_y) {}
    virtual ~WindowMoveEvent() = default;
};


class WindowShouldCloseEvent : public WindowEvent {
public:
    const std::shared_ptr<Window> window;

    WindowShouldCloseEvent(
        const std::shared_ptr<Window>& _window
    ) : window(_window) {}
    virtual ~WindowShouldCloseEvent() = default;
};

#endif // UTILS_WINDOWEVENT
